home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 4 / Apprentice-Release4.iso / Source Code / Libraries / DCLAP 4j / DBio / DSequence.h < prev    next >
Text File  |  1995-12-17  |  5KB  |  169 lines

  1. // DSequence.h 
  2. // by d.g.gilbert, Oct 1990 -- 1994
  3.  
  4.  
  5. #ifndef __USEQUENCE__
  6. #define __USEQUENCE__
  7.  
  8.  
  9. #include <DObject.h>
  10.             
  11. //typedef    char         SeqName[kNameWidth+1];
  12.  
  13. struct SearchRec {
  14.     long        lim,indx,step;
  15.     char*     targ;
  16.     }; 
  17.  
  18.     
  19. class DFile;
  20.  
  21. class    DSequence : public DObject {
  22. private:        
  23.     char*             fInfo;                 //sequence documentation 
  24.     char*             fBases;                //the bases
  25.     char*             fMasks;                //style masks
  26.     char*             fName;  
  27.     short             fKind;                //dna/rna/amino/...
  28.     long                 fLength;            //base count
  29.     unsigned long    fChecksum;    //checksum for the bases
  30.     unsigned long    fModTime;        //date/time last modified
  31.     long                 fOrigin;            //offset of start from 0
  32.     long                 fSelStart;        //selection start -- tmp
  33.     long                 fSelBases;        //selection size
  34.     short             fIndex;                //index into SeqList (temp?)
  35.     SearchRec        fSearchRec;
  36.     Boolean         fDeleted:1;        //? Whether the seq has been deleted 
  37.     Boolean         fOpen:1;            //? seq is open in a view
  38.     Boolean         fChanged:1;        //modified since updt
  39.     Boolean            fMasksOk:1;        //if fMasks is in a good state
  40.  
  41. public:
  42.     static char* kConsensus;
  43.     static char    indelHard, indelSoft, indelEdge;
  44.     
  45.     enum seqType {
  46.         kDNA             = 1,
  47.         kRNA             = 2,
  48.         kNucleic  = 3, //IUB/IUPAC codes
  49.         kAmino         = 4,
  50.         kOtherSeq    = 5
  51.         };
  52.     enum nucBits {
  53.         /* NucleicBits (values in 0..31):  
  54.                 %00001 = A
  55.                 %11000 = kMaskU = U (rna) 
  56.                 %10000 = kMaskIndel = indel (-)
  57.                 %01111 = kMaskNucs = N or .
  58.                 %00000 = non-nucleic */
  59.         kBitA    = 0,  kMaskA = 1,     
  60.         kBitC = 1,    kMaskC = 2,
  61.         kBitG    = 2,    kMaskG = 4,
  62.         kBitT    = 3,    kMaskT = 8,        
  63.         kBitExtra = 4, kMaskExtra = 16,
  64.         kMaskIndel= 16, //kMaskExtra,
  65.         kMaskU         = 8+16, kMaskRna = 8+16, // kMaskT + kMaskExtra, kMaskRna = kMaskU,
  66.         kMaskNucs = 1+2+4+8, //kMaskA + kMaskC + kMaskG + kMaskT,
  67.         kBit5 = 5,  kMask5 = 32,  //unused NucleicBits in byte
  68.         kBit6 = 6,    kMask6 = 64,
  69.         kBit7 = 7,    kMask7 = 128
  70.         };
  71.     enum {
  72.         kNameWidth    = 31,
  73.         kMaxSeqShow = 10,
  74.         kMaxSname    = 20
  75.         };
  76.  
  77.     DSequence();
  78.     virtual ~DSequence();
  79.  
  80.     static long     NucleicBits( char nuc);
  81.     static Boolean IsNucleicMatch( long xNucBits, long yNucBits);
  82.     static char     NucleicConsensus( long xNucBits, long yNucBits);
  83.     static void     NucleicComplement( Boolean isrna, char* fromSeq, char* toSeq, long len);
  84.     static char*     Nucleic23Protein( char* nucs, long nbases);
  85.     static const char*     Amino123( char amino1);
  86.     static char      Amino321( char* amino);
  87.  
  88.     virtual DObject* Clone(); // override 
  89.     virtual void CopyContents( DSequence* fromSeq);
  90.     
  91.     char* Bases() const { return fBases; }
  92.     char* Masks() const { return fMasks; }
  93.     char* Name() const { return fName; }
  94.     char* Info() const { return fInfo; }
  95.     long     LengthF() const { return fLength; }
  96.     short Kind() const { return fKind; }
  97.     short Index() const { return fIndex; }
  98.     char* KindStr() const;
  99.     Boolean Changed() const { return fChanged; }
  100.     unsigned long ModTime() const { return fModTime; }
  101.     unsigned long Checksum() const { return fChecksum; }
  102.     long Origin() const { return fOrigin; }
  103.     Boolean IsAmino() { return (fKind == kAmino); }
  104.     Boolean IsDeleted() { return fDeleted; }
  105.     
  106.     void SetBases( char* theBases);
  107.     void UpdateBases( char* theBases, long theLength); // caller must know what he does  
  108.     void SetMasks( char* theMasks);
  109.     void FixMasks();
  110.     void SetInfo( char* theInfo);
  111.     void SetName( char* theName);
  112.     void SetKind( short theKind);
  113.     void SetIndex( short theIndex);
  114.     void SetTime( unsigned long theTime);
  115.     void SetOrigin( long theOrigin);
  116.     void SetDeleted( Boolean turnon) { fDeleted= turnon; }
  117.     
  118.     virtual void SetSelection( long start, long nbases);
  119.     virtual void GetSelection( long& start, long& nbases);
  120.     virtual void ClearSelection();
  121.     virtual void InsertSpacers( long insertPoint, long insertCount, char spacer);
  122.     
  123.     virtual DSequence* CopyRange();
  124.     virtual DSequence* CutRange();
  125.     virtual DSequence* PasteBases( long insertPoint, char* fromBases, char* fromMasks);
  126.     virtual DSequence* Reverse();
  127.     virtual DSequence* Complement();
  128.     virtual DSequence* Dna2Rna( Boolean toRna);
  129.     virtual DSequence* ChangeCase( Boolean toUpper);
  130.     virtual DSequence* Translate(Boolean keepUnselected = true);
  131.     virtual DSequence* Slide( long slideDist);
  132.     virtual DSequence* Compress();
  133.     virtual DSequence* LockIndels( Boolean doLock);
  134.  
  135.     virtual long Search( char* target, Boolean backwards);
  136.     virtual long SearchAgain(); 
  137.     virtual void SearchORF( long& start, long& stop); 
  138.     virtual void NucleicSearch(char* source, char* target, SearchRec& aSearchRec);
  139.     virtual void ProteinSearch(char* source, char* target, SearchRec& aSearchRec);
  140.  
  141.     virtual Boolean IsConsensus();
  142.     virtual Boolean GoodChar(char& aChar); 
  143.     virtual void Reformat(short format);
  144.     virtual void Modified();  //set fModTime
  145.     virtual void UpdateFlds(); 
  146.     
  147.     Boolean MasksOk() { return fMasksOk; }
  148.     virtual short MaskAt(long baseindex, short masklevel= 1);
  149.     virtual void  SetMaskAt(long baseindex, short masklevel= 1, short maskval= 1);
  150.     virtual void  FlipMaskAt(long baseindex, short masklevel= 1);
  151.     virtual void  ClearMaskAt(long baseindex, short masklevel= 1) 
  152.                                 { SetMaskAt(baseindex, masklevel, 0); }
  153.     virtual void  SetMask(short masklevel= 1, short maskval= 1); 
  154.     virtual void  FlipMask(short masklevel= 1); 
  155.     virtual void  ClearMask(short masklevel= 1) { SetMask(masklevel, 0); }
  156.  
  157.     virtual void DoWrite( DFile* aFile, short format);  // revise for ostream
  158.     virtual void DoWriteSelection( DFile* aFile, short format); // revise for ostream
  159. };
  160.  
  161.  
  162. extern char*    gDefSeqName;
  163. extern short  gLinesPerSeqWritten;
  164.     
  165. DSequence* MakeSequence(char* name, char* bases, char* info, long modtime);
  166.     
  167.  
  168. #endif
  169.